home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Lists.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  10KB  |  317 lines

  1. /*
  2.      File:        Lists.h
  3.  
  4.      Contains:    List Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __LISTS__
  19. #define __LISTS__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __CONTROLS__
  25. #include <Controls.h>
  26. #endif
  27. #ifndef __MEMORY__
  28. #include <Memory.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. #if FOR_SYSTEM7_AND_SYSTEM8_DEPRECATED
  44. typedef Point Cell;
  45. typedef Rect ListBounds;
  46. typedef char DataArray[32001];
  47. typedef char *DataPtr;
  48. typedef DataPtr *DataHandle;
  49. typedef pascal short (*ListSearchProcPtr)(Ptr aPtr, Ptr bPtr, short aLen, short bLen);
  50. /*
  51.         This ProcPtr uses register based parameters on the 68k and cannot
  52.         be written in or called from a high-level language without the help of
  53.         mixed mode or assembly glue.
  54.  
  55.             typedef pascal Boolean (*ListClickLoopProcPtr)(void );
  56.  
  57. */
  58.  
  59. #if GENERATINGCFM
  60. typedef UniversalProcPtr ListSearchUPP;
  61. typedef UniversalProcPtr ListClickLoopUPP;
  62. #else
  63. typedef ListSearchProcPtr ListSearchUPP;
  64. typedef Register68kProcPtr ListClickLoopUPP;
  65. #endif
  66. struct ListRec {
  67.     Rect                             rView;
  68.     GrafPtr                         port;
  69.     Point                             indent;
  70.     Point                             cellSize;
  71.     ListBounds                         visible;
  72.     ControlRef                         vScroll;
  73.     ControlRef                         hScroll;
  74.     SInt8                             selFlags;
  75.     Boolean                         lActive;
  76.     SInt8                             lReserved;
  77.     SInt8                             listFlags;
  78.     long                             clikTime;
  79.     Point                             clikLoc;
  80.     Point                             mouseLoc;
  81.     ListClickLoopUPP                 lClickLoop;
  82.     Cell                             lastClick;
  83.     long                             refCon;
  84.     Handle                             listDefProc;
  85.     Handle                             userHandle;
  86.     ListBounds                         dataBounds;
  87.     DataHandle                         cells;
  88.     short                             maxIndex;
  89.     short                             cellArray[1];
  90. };
  91. typedef struct ListRec ListRec;
  92.  
  93. typedef ListRec *ListPtr;
  94. typedef ListPtr *ListHandle;
  95. typedef ListHandle ListRef;
  96.  
  97. enum {
  98.     lDoVAutoscroll                = 2,
  99.     lDoHAutoscroll                = 1,
  100.     lOnlyOne                    = -128,
  101.     lExtendDrag                    = 64,
  102.     lNoDisjoint                    = 32,
  103.     lNoExtend                    = 16,
  104.     lNoRect                        = 8,
  105.     lUseSense                    = 4,
  106.     lNoNilHilite                = 2
  107. };
  108.  
  109.  
  110. enum {
  111.     lDoVAutoscrollBit            = 1,
  112.     lDoHAutoscrollBit            = 0,
  113.     lOnlyOneBit                    = 7,
  114.     lExtendDragBit                = 6,
  115.     lNoDisjointBit                = 5,
  116.     lNoExtendBit                = 4,
  117.     lNoRectBit                    = 3,
  118.     lUseSenseBit                = 2,
  119.     lNoNilHiliteBit                = 1
  120. };
  121.  
  122.  
  123. enum {
  124.     lInitMsg                    = 0,
  125.     lDrawMsg                    = 1,
  126.     lHiliteMsg                    = 2,
  127.     lCloseMsg                    = 3
  128. };
  129.  
  130. typedef pascal void (*ListDefProcPtr)(short lMessage, Boolean lSelect, Rect *lRect, Cell lCell, short lDataOffset, short lDataLen, ListRef lHandle);
  131.  
  132. #if GENERATINGCFM
  133. typedef UniversalProcPtr ListDefUPP;
  134. #else
  135. typedef ListDefProcPtr ListDefUPP;
  136. #endif
  137. extern pascal ListRef LNew(const Rect *rView, const ListBounds *dataBounds, Point cSize, short theProc, WindowRef theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert)
  138.  THREEWORDINLINE(0x3F3C, 0x0044, 0xA9E7);
  139.  
  140. extern pascal void LDispose(ListRef lHandle)
  141.  THREEWORDINLINE(0x3F3C, 0x0028, 0xA9E7);
  142.  
  143. extern pascal short LAddColumn(short count, short colNum, ListRef lHandle)
  144.  THREEWORDINLINE(0x3F3C, 0x0004, 0xA9E7);
  145.  
  146. extern pascal short LAddRow(short count, short rowNum, ListRef lHandle)
  147.  THREEWORDINLINE(0x3F3C, 0x0008, 0xA9E7);
  148.  
  149. extern pascal void LDelColumn(short count, short colNum, ListRef lHandle)
  150.  THREEWORDINLINE(0x3F3C, 0x0020, 0xA9E7);
  151.  
  152. extern pascal void LDelRow(short count, short rowNum, ListRef lHandle)
  153.  THREEWORDINLINE(0x3F3C, 0x0024, 0xA9E7);
  154.  
  155. extern pascal Boolean LGetSelect(Boolean next, Cell *theCell, ListRef lHandle)
  156.  THREEWORDINLINE(0x3F3C, 0x003C, 0xA9E7);
  157.  
  158. extern pascal Cell LLastClick(ListRef lHandle)
  159.  THREEWORDINLINE(0x3F3C, 0x0040, 0xA9E7);
  160.  
  161. extern pascal Boolean LNextCell(Boolean hNext, Boolean vNext, Cell *theCell, ListRef lHandle)
  162.  THREEWORDINLINE(0x3F3C, 0x0048, 0xA9E7);
  163.  
  164. extern pascal Boolean LSearch(const void *dataPtr, short dataLen, ListSearchUPP searchProc, Cell *theCell, ListRef lHandle)
  165.  THREEWORDINLINE(0x3F3C, 0x0054, 0xA9E7);
  166.  
  167. extern pascal void LSize(short listWidth, short listHeight, ListRef lHandle)
  168.  THREEWORDINLINE(0x3F3C, 0x0060, 0xA9E7);
  169.  
  170. extern pascal void LSetDrawingMode(Boolean drawIt, ListRef lHandle)
  171.  THREEWORDINLINE(0x3F3C, 0x002C, 0xA9E7);
  172.  
  173. extern pascal void LScroll(short dCols, short dRows, ListRef lHandle)
  174.  THREEWORDINLINE(0x3F3C, 0x0050, 0xA9E7);
  175.  
  176. extern pascal void LAutoScroll(ListRef lHandle)
  177.  THREEWORDINLINE(0x3F3C, 0x0010, 0xA9E7);
  178.  
  179. extern pascal void LUpdate(RgnHandle theRgn, ListRef lHandle)
  180.  THREEWORDINLINE(0x3F3C, 0x0064, 0xA9E7);
  181.  
  182. extern pascal void LActivate(Boolean act, ListRef lHandle)
  183.  TWOWORDINLINE(0x4267, 0xA9E7);
  184.  
  185. extern pascal void LCellSize(Point cSize, ListRef lHandle)
  186.  THREEWORDINLINE(0x3F3C, 0x0014, 0xA9E7);
  187.  
  188. extern pascal Boolean LClick(Point pt, short modifiers, ListRef lHandle)
  189.  THREEWORDINLINE(0x3F3C, 0x0018, 0xA9E7);
  190.  
  191. extern pascal void LAddToCell(const void *dataPtr, short dataLen, Cell theCell, ListRef lHandle)
  192.  THREEWORDINLINE(0x3F3C, 0x000C, 0xA9E7);
  193.  
  194. extern pascal void LClrCell(Cell theCell, ListRef lHandle)
  195.  THREEWORDINLINE(0x3F3C, 0x001C, 0xA9E7);
  196.  
  197. extern pascal void LGetCell(void *dataPtr, short *dataLen, Cell theCell, ListRef lHandle)
  198.  THREEWORDINLINE(0x3F3C, 0x0038, 0xA9E7);
  199.  
  200. extern pascal void LRect(Rect *cellRect, Cell theCell, ListRef lHandle)
  201.  THREEWORDINLINE(0x3F3C, 0x004C, 0xA9E7);
  202.  
  203. extern pascal void LSetCell(const void *dataPtr, short dataLen, Cell theCell, ListRef lHandle)
  204.  THREEWORDINLINE(0x3F3C, 0x0058, 0xA9E7);
  205.  
  206. extern pascal void LSetSelect(Boolean setIt, Cell theCell, ListRef lHandle)
  207.  THREEWORDINLINE(0x3F3C, 0x005C, 0xA9E7);
  208.  
  209. extern pascal void LDraw(Cell theCell, ListRef lHandle)
  210.  THREEWORDINLINE(0x3F3C, 0x0030, 0xA9E7);
  211.  
  212.  
  213. #if GENERATINGCFM
  214. #else
  215. #endif
  216.  
  217. enum {
  218.     uppListSearchProcInfo = kPascalStackBased
  219.          | RESULT_SIZE(SIZE_CODE(sizeof(short)))
  220.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Ptr)))
  221.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Ptr)))
  222.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short)))
  223.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(short))),
  224.     uppListClickLoopProcInfo = kRegisterBased
  225.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  226.          | REGISTER_RESULT_LOCATION(kRegisterD0),
  227.     uppListDefProcInfo = kPascalStackBased
  228.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  229.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Boolean)))
  230.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Rect *)))
  231.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Cell)))
  232.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(short)))
  233.          | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(short)))
  234.          | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(ListRef)))
  235. };
  236.  
  237. #if GENERATINGCFM
  238. #define NewListSearchProc(userRoutine)        \
  239.         (ListSearchUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppListSearchProcInfo, GetCurrentArchitecture())
  240. #define NewListClickLoopProc(userRoutine)        \
  241.         (ListClickLoopUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppListClickLoopProcInfo, GetCurrentArchitecture())
  242. #define NewListDefProc(userRoutine)        \
  243.         (ListDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppListDefProcInfo, GetCurrentArchitecture())
  244. #else
  245. #define NewListSearchProc(userRoutine)        \
  246.         ((ListSearchUPP) (userRoutine))
  247. #define NewListClickLoopProc(userRoutine)        \
  248.         ((ListClickLoopUPP) (userRoutine))
  249. #define NewListDefProc(userRoutine)        \
  250.         ((ListDefUPP) (userRoutine))
  251. #endif
  252.  
  253. #if GENERATINGCFM
  254. #define CallListSearchProc(userRoutine, aPtr, bPtr, aLen, bLen)        \
  255.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppListSearchProcInfo, (aPtr), (bPtr), (aLen), (bLen))
  256. #define CallListClickLoopProc(userRoutine)        \
  257.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppListClickLoopProcInfo)
  258. #define CallListDefProc(userRoutine, lMessage, lSelect, lRect, lCell, lDataOffset, lDataLen, lHandle)        \
  259.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppListDefProcInfo, (lMessage), (lSelect), (lRect), (lCell), (lDataOffset), (lDataLen), (lHandle))
  260. #else
  261. #define CallListSearchProc(userRoutine, aPtr, bPtr, aLen, bLen)        \
  262.         (*(userRoutine))((aPtr), (bPtr), (aLen), (bLen))
  263. /* (*ListClickLoopUPP) cannot be called from a high-level language without the Mixed Mode Manager */
  264. #define CallListDefProc(userRoutine, lMessage, lSelect, lRect, lCell, lDataOffset, lDataLen, lHandle)        \
  265.         (*(userRoutine))((lMessage), (lSelect), (lRect), (lCell), (lDataOffset), (lDataLen), (lHandle))
  266. #endif
  267. extern pascal void LGetCellDataLocation(short *offset, short *len, Cell theCell, ListRef lHandle)
  268.  THREEWORDINLINE(0x3F3C, 0x0034, 0xA9E7);
  269.  
  270. #if CGLUESUPPORTED
  271. extern void laddtocell(Ptr dataPtr, short dataLen, Cell *theCell, ListRef lHandle);
  272.  
  273. extern void lclrcell(Cell *theCell, ListRef lHandle);
  274.  
  275. extern void lgetcelldatalocation(short *offset, short *len, Cell *theCell, ListRef lHandle);
  276.  
  277. extern void lgetcell(Ptr dataPtr, short *dataLen, Cell *theCell, ListRef lHandle);
  278.  
  279. extern ListRef lnew(Rect *rView, ListBounds *dataBounds, Point *cSize, short theProc, WindowRef theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert);
  280.  
  281. extern void lrect(Rect *cellRect, Cell *theCell, ListRef lHandle);
  282.  
  283. extern void lsetcell(Ptr dataPtr, short dataLen, Cell *theCell, ListRef lHandle);
  284.  
  285. extern void lsetselect(Boolean setIt, Cell *theCell, ListRef lHandle);
  286.  
  287. extern void ldraw(Cell *theCell, ListRef lHandle);
  288.  
  289. extern Boolean lclick(Point *pt, short modifiers, ListRef lHandle);
  290.  
  291. extern void lcellsize(Point *cSize, ListRef lHandle);
  292.  
  293. #endif
  294. #if OLDROUTINENAMES
  295. #define LDoDraw(drawIt, lHandle) LSetDrawingMode(drawIt, lHandle)
  296. #define LFind(offset, len, theCell, lHandle) LGetCellDataLocation(offset, len, theCell, lHandle)
  297. #if CGLUESUPPORTED
  298. #define lfind(offset, len, theCell, lHandle) lgetcelldatalocation(offset, len, theCell, lHandle)
  299. #endif
  300. #endif
  301. #endif
  302.  
  303. #if PRAGMA_ALIGN_SUPPORTED
  304. #pragma options align=reset
  305. #endif
  306.  
  307. #if PRAGMA_IMPORT_SUPPORTED
  308. #pragma import off
  309. #endif
  310.  
  311. #ifdef __cplusplus
  312. }
  313. #endif
  314.  
  315. #endif /* __LISTS__ */
  316.  
  317.